package com.jctrip.hotel.source.model.meituan.resp;

import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @Author: zxy
 * @CreateTime: 2023-12-26 11:43
 * @Description: https://developer-distribution.meituan.com/#/apiDocs/1/25/29
 */
@Data
public class OrderQueryResp implements Serializable {
    /**
     * 订单详情列表
     */
    private List<OrderInfo> orderInfos;

    /**
     * 查询结果码：
     * 0 查询成功
     * 1 系统繁忙，请稍后重试
     * 2 查询订单号不存在
     * 20 其它
     */
    private Integer code;

    /**
     * 描述。
     */
    private String desc;

    @Data
    public static class OrderInfo implements Serializable {
        /**
         * 订单基本信息。
         */
        private BaseInfo baseInfo;

        /**
         * 预约单信息。
         */
        private AptInfo aptInfo;

        /**
         * 间夜信息。
         */
        private List<RoomNight> roomNights;

        /**
         * 退款信息
         */
        private List<RefundInfo> refundInfos;

        /**
         * 新增字段（仅针对现付产品）拆单信息。外层数组的元素表示多次拆单信息，内层数组的元素表示一次拆单每晚的信息。
         */
        private List<OrderSplitInfo> orderSplitInfos;
    }

    @Data
    public static class BaseInfo implements Serializable {
        /**
         * 美团订单ID。
         */
        private Long mtOrderId;

        /**
         * 产品ID。
         */
        private Integer goodsId;

        /**
         * 订单总价，单位为分。
         */
        private Integer totalPrice;

        /**
         * 结算价，单位为分。
         */
        private Integer settlePrice;

        /**
         * 预约下单时间，格式为yyyy-MM-dd HH:mm:ss。
         */
        private String createTime;

        /**
         * 订单状态：
         * 10 创建订单 create
         * 20 预定中 booking
         * 21 预定成功 book_suc
         * 22 预定失败 book_fail
         * 30 取消中 canceling
         * 31 取消成功 cancel_suc
         * 32 取消失败 cancel_fail
         * 40 已消费退款 abort（美团客服介入后才可能出现此状态）
         * 50 已入住 book_checkin
         */
        private Integer orderStatus;

        /**
         * 预留房设置：
         * false 非预留房
         * true 预留房
         */
        private Boolean fixRoom;

        /**
         * 产品类型：
         * 1 全日房
         * 2 钟点房
         */
        private Integer goodsType;

        /**
         * 酒店确认号。规则：预订成功后会，若从酒店处能拿到预订号数据，美团将通过confirmationNumber字段返回；若没能拿到预订号数据，则返回美团订单号。
         */
        private String confirmationNumber;

        /**
         * 酒店I版下单时搜索页传入的"接入方个性化数据"，API下单无需关注
         */
        private String misc;
    }

    @Data
    public static class AptInfo implements Serializable {

        /**
         * 美团订单ID。
         */
        private Long mtOrderId;

        /**
         * 入住时间，格式为yyyy-MM-dd HH:mm:ss。
         */
        private String checkinTime;

        /**
         * 离店时间，格式为yyyy-MM-dd HH:mm:ss。
         */
        private String checkoutTime;

        /**
         * 到店时间，格式为yyyy-MM-dd HH:mm:ss。
         */
        private String arriveTime;

        /**
         * 用户预约单上填写的备注，备注信息不超过128个字符
         */
        private String comment;

        /**
         * 房间名称。
         */
        private String roomName;

        /**
         * 房间ID。
         */
        private Integer roomId;

        /**
         * 入住房间数量。
         */
        private Integer roomCount;

        /**
         * 酒店ID。
         */
        private Long hotelId;

        /**
         * 酒店名称。
         */
        private String poiName;

        /**
         * 入住人姓名列表，各姓名间以英文逗号分隔。
         */
        private String personNames;

        /**
         * 联系人姓名。
         */
        private String contactName;

        /**
         * 联系人电话号码。
         */
        private String contactPhone;
    }

    @Data
    public static class RoomNight implements Serializable {
        /**
         * 间夜日期，格式为yyyy-MM-dd
         */
        private String bizDate;

        /**
         * 预约状态：
         * 1020 预约中
         * 1040 商家拒绝 refuse
         * 1050 接受预约 accept
         * 1070 已取消 cancel
         * 1080 取消失败
         * 1090 美团客服取消 cancel_exception
         * 1110 已消费或已入住 checkin
         */
        private Integer appointmentStatus;

        /**
         * 支付状态：
         * 2040 支付成功 pay_suc
         * 2050 已退款 refund_suc
         */
        private Integer payStatus;

        /**
         * 卖价单价，单位为分。
         */
        private Integer sellPrice;

        /**
         * 给分销商佣金，单位为分。
         */
        private Integer subPrice;
    }

    @Data
    public static class RefundInfo implements Serializable {

        /**
         * 退款ID
         */
        private Integer refundId;

        /**
         * 退款金额（退给用户金额），单位为分。
         */
        private Integer refundPrice;

        /**
         * 退结算金额（退分销商金额），单位为分。
         */
        private Integer refundSettlePrice;

        /**
         * 退款时间
         */
        private String refundTime;
    }

    @Data
    public static class OrderSplitInfo implements Serializable {

        /**
         * 日期
         */
        private String date;

        /**
         * 入住房间数量
         */
        private Integer roomCount;

        /**
         * 美团价,单位为分。
         */
        private Integer mtPrice;

        /**
         * 结算价,单位为分。
         */
        private Integer settlePrice;

        /**
         * 给分销商的佣金，单位为分。
         */
        private Integer subPrice;

        /**
         * 分销平台与分销商约定的佣金比率，取值为实际值乘以10000的结果。如佣金比率为4%，则subRatio=400。
         */
        private Integer dtorSubRatio;

        /**
         * 拆单发生的时间,格式yyyy-MM-dd HH:mm
         */
        private String orderSplitTime;

    }
}
